package com.redstar.interesting.common.starter.util;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 特殊字符检测工具（防止传入非法字符和sql注入攻击）
 * @author lihongxing
 */
public class IllegalStrFilterUtil {

    private static final String REGX = "!|！|@|◎|#|＃|(\\$)|￥|%|％|(\\^)|……|(\\&)|※|(\\*)|×|(\\()|（|(\\))|）|_|——|(\\+)|＋|(\\|)|§ ";
 
    /**
     * 对常见的sql注入攻击进行拦截
     * @param sInput
     * @return
     *  true 不存在SQL注入风险
     *  false 存在SQL注入风险
     */
    public static boolean sqlStrFilter(String sInput) {
        if (sInput == null || sInput.trim().length() == 0) {
            return false;
        }
        sInput = sInput.toUpperCase();
        return !sInput.contains("DELETE") && !sInput.contains("ASCII")
                && !sInput.contains("UPDATE") && !sInput.contains("SELECT")
                && !sInput.contains("'") && !sInput.contains("SUBSTR(")
                && !sInput.contains("COUNT(") && !sInput.contains(" OR ")
                && !sInput.contains(" AND ") && !sInput.contains("DROP")
                && !sInput.contains("EXECUTE") && !sInput.contains("EXEC")
                && !sInput.contains("TRUNCATE") && !sInput.contains("INTO")
                && !sInput.contains("DECLARE") && !sInput.contains("MASTER");
    }
 
    /**
     * 对非法字符进行检测
     *
     * @param sInput
     * @return
     *  true 表示参数包含非法字符
     *  false 表示参数不包含非法字符
     */
    public static boolean isIllegalStr(String sInput) {
        if (sInput == null || sInput.trim().length() == 0) {
            return false;
        }
        Pattern compile = Pattern.compile(REGX, Pattern.CASE_INSENSITIVE);
        Matcher matcher = compile.matcher(sInput.trim());
        return matcher.find();
    }
}